package cn.fl.system.service;

import java.util.List;
import java.util.Map;

import cmm.mid.core.framework.page.KeyValueVO;
import cn.cmm.base.framework.exception.BaseException;
import cn.fl.system.vo.SysOrgVO;
import net.sf.json.JSONArray;

/**
 * @Description: 组织架构表 客户端服务层接口
 * 业务层方法名称前缀：
 * 新增：add*
 * 删除：remove*
 * 修改：modify*
 * 查询对象：select* get*
 * 查询集合：search*
 */
public interface ISysOrgService {
	
	/**
	 * 获取唯一对象
	 * @param id 主键
	 * @return 对象DTO
	 */
	public SysOrgVO selectById(Long id)throws BaseException;
	
	/**
	 * 新增
	 * @param entity
	 * @return
	 */
    //public Long add(SysOrgVO entity) throws BaseException;

    /**
     * 删除
     * @param id
     * @return
     */
    public boolean removeById(Long id)throws BaseException;

    /**
     * 修改
     * @param entity
     * @return
     */
    public boolean modify(SysOrgVO entity)throws BaseException;

    /**
     * 分页查询所有
     * @param page
     * @return
     */
    //public Pager searchListPage(Pager page)throws BaseException;
	/**
	 * 查询组织架构点一次查一次
	 */
	public JSONArray searchList(Long orgPid)throws BaseException;
//	/**
//	 * 查询组织架构一次性查出
//	 */
//	public JSONArray searchList()throws BaseException;
	
	/**
	 * 新增子级组织架构
	 */
	public Long addSysOrgChild(SysOrgVO entity)throws BaseException;
	
	/**
     * 组织架构类型<KEY,VALUE>集合
     * @return <KEY,VALUE>集合
     */
    public List<KeyValueVO> searchSysOrgTypCdList()throws BaseException;
    
    /**
     * 查询组织机构树-通过组织机构名称
     * @param orgNm 组织机构名称
     * @return 返回JSON集合
     */
    public JSONArray searchOrgTreeByOrgNm(String orgNm,String sysCd) throws BaseException;
    
    public JSONArray searchOrgTreeByOrgCon(String orgNm,String orgTypCd, String sysCd) throws BaseException;
    
    public JSONArray searchOrgTreeByOrg(String orgCd,String orgTypCd, String sysCd) throws BaseException;
    /**
     * 获取当前用户所属事业部的组织机构树
     * @param currentBuOrgCd
     * @param currentSysCd
     * @return
     * @throws BaseException
     */
	public JSONArray searchOrgTreeByCurrentUser(String currentBuOrgCd, String currentSysCd)throws BaseException;


	/**
	 * 根据组织架构类型及系统代码查询
	 */
	public List<SysOrgVO> searchListByOrgTypCd(String orgTypCd, String sysCd) throws BaseException;

	public List<SysOrgVO> searchListByOrgTypCd(String sysCd) throws BaseException;

	public SysOrgVO selectSysOrgByOrgCd(String nodeOrgCd, String flServiceSysCd);

	/**
	 * @MethodName searchBusinessOrgList
	 * @Description: 获取事业部信息
	 * @Author: wangpengtao@lionbridgecapital.cn
	 * @CreateDate: 2020/2/10 11:47
	 * @Version: V1.0.0
	 * @Param
	 * @Return java.util.List<cmm.mid.core.framework.page.KeyValueVO>
	 * @UpdateRemark [序号][YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	public List<KeyValueVO> searchBusinessOrgList() throws BaseException;

	/**
	 * @MethodName searchBusinessOrgList
	 * @Description: 获取事业部信息
	 * @Author: wangpengtao@lionbridgecapital.cn
	 * @CreateDate: 2020/2/10 11:47
	 * @Version: V1.0.0
	 * @Param
	 * @Return java.util.List<cmm.mid.core.framework.page.KeyValueVO>
	 * @UpdateRemark [序号][YYYY-MM-DD] [更改人姓名][变更描述]
	 */
	public Map<String,String> searchBusinessOrgMap() throws BaseException;
}
